package org.study.dynamic.ds.mapper;

import com.baomidou.dynamic.datasource.annotation.DS;
import org.apache.ibatis.annotations.Param;
import org.study.dynamic.ds.constant.DsNameConstants;

import java.util.List;
import java.util.Map;

/**
 * 作用描述
 *
 * @author doveylovey
 * @version v1.0.0
 * @email 1135782208@qq.com
 * @date 2023年06月09日
 */
public interface DatabaseTableMapper {
    /**
     * 查询数据库中每个表的详细信息
     *
     * @param schemaName 数据库名称，若为空则查询当前使用的数据库中的所有表
     * @return java.util.List<java.util.Map < java.lang.String, java.lang.String>>
     * @throws
     **/
    @DS(DsNameConstants.MYSQL)
    List<Map<String, String>> getTables(@Param("schemaName") String schemaName);

    /**
     * 显示数据库中指定表的列名称
     *
     * @param schemaName 数据库名称，若为空则查询当前使用的数据库中的表
     * @param tableName  表名称
     * @return java.util.List<java.util.Map < java.lang.String, java.lang.String>>
     * @throws
     **/
    @DS(DsNameConstants.MYSQL)
    List<Map<String, String>> getColumns(@Param("schemaName") String schemaName, @Param("tableName") String tableName);

    /**
     * 获取TDengine超级表信息，如：创建时间、超级表名称、列数量、子表数量、标签数量
     *
     * @param tableNamePrefix
     * @return java.util.List<java.util.Map < java.lang.String, java.lang.Object>>
     * @throws
     **/
    @DS(DsNameConstants.TDENGINE)
    List<Map<String, Object>> showStables(@Param("tableNamePrefix") String tableNamePrefix);

    /**
     * 获取TDengine子表信息，如：创建时间、uid、所属超级表名称、列数量、vgId、子表名称、tid
     *
     * @param tableNamePrefix
     * @return java.util.List<java.util.Map < java.lang.String, java.lang.Object>>
     * @throws
     **/
    @DS(DsNameConstants.TDENGINE)
    List<Map<String, Object>> showTables(@Param("tableNamePrefix") String tableNamePrefix);

    /**
     * 获取TDengine表的元数据信息，如列名称、列类型、长度
     *
     * @param tableName
     * @return java.util.List<java.util.Map < java.lang.String, java.lang.Object>>
     * @throws
     **/
    @DS(DsNameConstants.TDENGINE)
    List<Map<String, Object>> descTable(@Param("tableName") String tableName);
}
